//package com.xjx.common.config;
//
//import com.xjx.common.util.ConsistentHashUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
//import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
//import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
//import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import javax.sql.DataSource;
//import java.sql.SQLException;
//import java.util.*;
//
//
//@Configuration
//@Slf4j
//public class ShardingConfig {
//
//    @Value("${sharding.datasource.names:ds0,ds1}")
//    private String dataSourceNames;
//
//    @Value("${sharding.tables:account,traffic}")
//    private String tableNames;
//
//    /**
//     * 配置分片数据源
//     */
//    @Bean
//    public DataSource shardingDataSource() throws SQLException {
//        // 创建数据源映射
//        Map<String, DataSource> dataSourceMap = createDataSourceMap();
//
//        // 创建分片规则配置
//        ShardingRuleConfiguration shardingRuleConfig = createShardingRuleConfiguration();
//
//        // 创建分片数据源
//        return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new Properties());
//    }
//
//    /**
//     * 创建数据源映射
//     */
//    private Map<String, DataSource> createDataSourceMap() {
//        Map<String, DataSource> dataSourceMap = new HashMap<>();
//
//        // 解析数据源名称
//        String[] names = dataSourceNames.split(",");
//        for (String name : names) {
//            // 这里应该根据实际配置创建数据源
//            // 为了示例，使用占位符
//            log.info("创建数据源: {}", name);
//        }
//
//        return dataSourceMap;
//    }
//
//    /**
//     * 创建分片规则配置
//     */
//    private ShardingRuleConfiguration createShardingRuleConfiguration() {
//        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
//
//        // 配置表规则
//        String[] tables = tableNames.split(",");
//        for (String table : tables) {
//            TableRuleConfiguration tableRuleConfig = createTableRuleConfiguration(table);
//            shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
//        }
//
//        // 配置默认分库策略（一致性哈希）
//        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
//            new StandardShardingStrategyConfiguration("account_no", "consistentHashAlgorithm")
//        );
//
//        // 配置默认分表策略（一致性哈希）
//        shardingRuleConfig.setDefaultTableShardingStrategyConfig(
//            new StandardShardingStrategyConfiguration("id", "consistentHashAlgorithm")
//        );
//
//        return shardingRuleConfig;
//    }
//
//    /**
//     * 创建表规则配置
//     */
//    private TableRuleConfiguration createTableRuleConfiguration(String tableName) {
//        TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(tableName);
//
//        // 配置数据节点
//        String[] names = dataSourceNames.split(",");
//        StringBuilder dataNodes = new StringBuilder();
//        for (int i = 0; i < names.length; i++) {
//            if (i > 0) dataNodes.append(",");
//            dataNodes.append(names[i]).append(".").append(tableName);
//        }
//        tableRuleConfig.setActualDataNodes(dataNodes.toString());
//
//        return tableRuleConfig;
//    }
//}

